<?php

/**
 * 
 * 
 * @author mills
 *
 */
class Logger {
	
	// Das singleton der Klasse Logger
	private static $singleton;
	
	// In diesem Array stehen alle zulässigen LogLevel
	private $logLevel = array(
		LEVEL_EXCEPTION => 'exception',
		LEVEL_CRITICAL	=> 'critical',
		LEVEL_ERROR		=> 'error',
		LEVEL_WARN		=> 'warning',
		LEVEL_INFO		=> 'info',
		LEVEL_DEBUG		=> 'debug'
	);
	
	/**
	 * Gibt die singleton Instanz des Logger zurück. Wenn noch kein Logger
	 * erzeugt wurde, so wird dieser auch gleichzeitig erzeugt.
	 */
	static public function getInstance() {
		if (!isset(self::$singleton)) {
			self::$singleton = new Logger();
		}
		
		return self::$singleton;
	}
	
	/**
	 * Der Konstruktor der Klasse Logger
	 */
	function __construct() {
	}
	
	/**
	 * Diese Funktion loggt die Nachricht in die main.log Datei
	 * 
	 * @param string $msg Lognachricht
	 */
	public function logFile($msg, $level) {
		
		// Wenn eine debug nachricht geschrieben werden soll, jedoch debug deaktiviert ist, dann
		// einfach returnen und die Nachricht nicht schreiben
		if (isset($level) && $level === LEVEL_DEBUG && !DEBUG_ENABLED) {
			return;
		}
		
		// Datei öffnen
		$fp = fopen(ROOT_FOLDER.'logs/main.log', "a");

		// Wenn der übergebene Loglevel nicht übergeben wurde, dann eine Fehlermeldung loggen
		if (!isset($this->logLevel[$level]))
			fwrite($fp, "Unsupported log-level for msg: ". $msg);
		
		else {
			// Nachricht bauen
			$str = "[" . date("Y/m/d h:i:s", mktime()) . "] (" . $this->logLevel[$level] .") " . $msg;
			
			// Nachricht in die Datei schreiben
			fwrite($fp, $str."\n");
		}
		
		// Datei schließen
		fclose($fp);		
	}
	
}

?>